// pages/user-edit/user-edit.js
const app = getApp()

Page({
  data: {
    userInfo: null,
    loading: true,
    submitting: false,
    mode: 'edit', // 'edit' 或 'create'
    wechatData: null, // 微信数据
    userGroups: [], // 用户组列表
    groupIndex: 0, // 选中的用户组索引
    formData: {
    username: '',
    nickname: '',
    password: '',
    confirmPassword: '',
      phone: '',
      email: '',
      avatar: '',
      group_id: 1 // 默认用户组
    }
  },

  onLoad(options) {
    console.log('user-edit onLoad, options:', options)
    
    // 先加载用户组列表
    this.loadUserGroups()
    
    if (options.mode === 'create') {
      // 创建新用户模式
      this.setData({
        mode: 'create',
        wechatData: {
          openid: options.openid,
          session_key: options.session_key
        },
        formData: {
          username: '',
          nickname: '',
          password: '',
          confirmPassword: '',
          phone: '',
          email: '',
          group_id: 1 // 默认用户组
        }
      })
    } else {
      // 编辑现有用户模式
      this.loadUserInfo()
    }
  },

  // 加载用户组列表
  loadUserGroups() {
    console.log('=== 开始加载用户组列表 ===')
    console.log('当前用户token:', wx.getStorageSync('token'))
    console.log('当前用户信息:', wx.getStorageSync('userInfo'))
    
    app.userRequest({
      url: '/getUserGroups'
    }).then((res) => {
      console.log('=== 获取用户组列表成功 ===')
      console.log('响应数据:', res)
      this.setData({
        userGroups: res.data || []
      })
    }).catch((err) => {
      console.error('=== 获取用户组列表失败 ===')
      console.error('错误对象:', err)
      console.error('错误类型:', typeof err)
      console.error('错误消息:', err.msg)
      console.error('错误代码:', err.code)
      console.error('完整错误信息:', JSON.stringify(err, null, 2))
      
      // 记录到本地存储用于调试
      const errorLog = {
        timestamp: new Date().toISOString(),
        action: 'loadUserGroups',
        error: err,
        userToken: wx.getStorageSync('token'),
        userInfo: wx.getStorageSync('userInfo')
      }
      console.log('错误日志已记录:', errorLog)
      
      // 如果是因为未登录，提示用户登录
      if (err.code === 0 && err.msg && err.msg.includes('未登录')) {
        console.log('检测到未登录错误，跳转到登录页')
        wx.showModal({
          title: '提示',
          content: '请先登录后再编辑个人资料',
          showCancel: false,
          success: () => {
            wx.reLaunch({
              url: '/pages/user-index/user-index'
            })
          }
        })
      } else {
        console.log('显示错误提示:', err.msg || '获取用户组列表失败')
        wx.showToast({
          title: err.msg || '获取用户组列表失败',
          icon: 'none',
          duration: 3000
        })
      }
    })
  },

  // 加载用户信息
  loadUserInfo() {
    this.setData({
      loading: true
    })

    app.userRequest({
      url: '/getUserInfo'
    }).then((res) => {
      const userInfo = res.data || {}
      
      // 找到当前用户组的索引
      let groupIndex = 0
      if (userInfo.group_id && this.data.userGroups.length > 0) {
        const index = this.data.userGroups.findIndex(group => group.id == userInfo.group_id)
        if (index >= 0) {
          groupIndex = index
        }
      }
      
      this.setData({
        userInfo: userInfo,
        groupIndex: groupIndex,
        formData: {
          nickname: userInfo.nickname || '',
          phone: userInfo.phone || '',
          email: userInfo.email || '',
          avatar: userInfo.avatar || '',
          group_id: userInfo.group_id || 1
        },
        loading: false
      })
    }).catch((err) => {
      console.error('获取用户信息失败:', err)
      this.setData({
        loading: false
      })
      wx.showToast({
        title: '获取用户信息失败',
        icon: 'none'
      })
    })
  },
  
  // 输入用户名
  onUsernameInput(e) {
    this.setData({
      'formData.username': e.detail.value
    })
  },

  // 输入昵称
  onNicknameInput(e) {
    this.setData({
      'formData.nickname': e.detail.value
    })
  },

  // 输入密码
  onPasswordInput(e) {
    this.setData({
      'formData.password': e.detail.value
    })
  },

  // 确认密码
  onConfirmPasswordInput(e) {
    this.setData({
      'formData.confirmPassword': e.detail.value
    })
  },

  // 输入手机号
  onPhoneInput(e) {
    this.setData({
      'formData.phone': e.detail.value
    })
  },

  // 输入邮箱
  onEmailInput(e) {
    this.setData({
      'formData.email': e.detail.value
    })
  },

  // 用户组选择
  onGroupChange(e) {
    const index = e.detail.value
    const selectedGroup = this.data.userGroups[index]
    
    this.setData({
      groupIndex: index,
      'formData.group_id': selectedGroup ? selectedGroup.id : 1
    })
  },

  // 选择头像
  chooseAvatar() {
    wx.chooseImage({
      count: 1,
      sizeType: ['compressed'],
      sourceType: ['album', 'camera'],
      success: (res) => {
        this.uploadAvatar(res.tempFilePaths[0])
      }
    })
  },

  // 上传头像
  uploadAvatar(filePath) {
    wx.showLoading({
      title: '上传中...'
    })

    app.userRequest({
      url: '/uploadAvatar',
      method: 'POST',
      data: {
        avatar: filePath
      }
    }).then((res) => {
      wx.hideLoading()
      if (res.data && res.data.avatar_url) {
        this.setData({
          'formData.avatar': res.data.avatar_url
        })
        wx.showToast({
          title: '头像上传成功',
          icon: 'success'
        })
      }
    }).catch((err) => {
      wx.hideLoading()
      console.error('上传头像失败:', err)
      wx.showToast({
        title: '头像上传失败',
        icon: 'none'
      })
    })
  },

  // 保存用户信息
  saveUserInfo() {
    if (this.data.mode === 'create') {
      this.createNewUser()
    } else {
      this.updateExistingUser()
    }
  },

  // 创建新用户
  createNewUser() {
    const { username, nickname, password, confirmPassword, phone, email } = this.data.formData

    // 验证必填字段
    if (!username || !username.trim()) {
      wx.showToast({
        title: '请输入用户名',
        icon: 'none'
      })
      return
    }
    
    if (!nickname || !nickname.trim()) {
      wx.showToast({
        title: '请输入昵称',
        icon: 'none'
      })
      return
    }
    
    if (!password || !password.trim()) {
      wx.showToast({
        title: '请输入密码',
        icon: 'none'
      })
      return
    }

    if (password !== confirmPassword) {
      wx.showToast({
        title: '两次密码不一致',
        icon: 'none'
      })
      return
    }
    
    this.setData({
      submitting: true
    })

    // 调用创建用户API
    app.userRequest({
      url: '/createAndBindUser',
      method: 'POST',
      data: {
        username: username.trim(),
        nickname: nickname.trim(),
        password: password.trim(),
        mobile: phone.trim(), // 改为mobile以匹配后端
        email: email.trim(),
        openid: this.data.wechatData.openid,
        session_key: this.data.wechatData.session_key,
        userInfo: {
          nickName: nickname.trim() // 添加userInfo参数
        }
      }
    }).then((res) => {
      wx.showToast({
        title: '创建成功',
        icon: 'success'
      })
      
      // 创建成功后跳转到用户首页
      setTimeout(() => {
        wx.reLaunch({
          url: '/pages/user-index/user-index'
        })
      }, 1500)
    }).catch((err) => {
      console.error('创建用户失败:', err)
      wx.showToast({
        title: '创建失败',
        icon: 'none'
      })
    }).finally(() => {
      this.setData({
        submitting: false
      })
    })
  },

  // 更新现有用户信息
  updateExistingUser() {
    const { nickname, phone, email, password, confirmPassword, group_id } = this.data.formData

    if (!nickname || !nickname.trim()) {
      wx.showToast({
        title: '请输入昵称',
        icon: 'none'
      })
      return
    }
    
    // 如果输入了密码，需要验证
    if (password && password.trim()) {
      if (password !== confirmPassword) {
        wx.showToast({
          title: '两次密码不一致',
          icon: 'none'
        })
        return
      }
      
      if (password.length < 6) {
        wx.showToast({
          title: '密码长度不能少于6位',
          icon: 'none'
        })
        return
      }
    }

    this.setData({
      submitting: true
    })

    // 准备提交的数据
    const submitData = {
      nickname: nickname.trim(),
      phone: phone ? phone.trim() : '',
      email: email ? email.trim() : '',
      group_id: group_id
    }

    // 如果输入了密码，添加到提交数据中
    if (password && password.trim()) {
      submitData.password = password.trim()
    }

    app.userRequest({
      url: '/updateUserInfo',
      method: 'POST',
      data: submitData
    }).then((res) => {
      wx.showToast({
        title: '保存成功',
        icon: 'success'
      })
      
      // 返回上一页
      setTimeout(() => {
        wx.navigateBack()
      }, 1500)
    }).catch((err) => {
      console.error('保存用户信息失败:', err)
      wx.showToast({
        title: '保存失败',
        icon: 'none'
      })
    }).finally(() => {
      this.setData({
        submitting: false
      })
    })
  },

  // 返回上一页
  goBack() {
    wx.navigateBack()
  }
}) 